home *** CD-ROM | disk | FTP | other *** search
- 10░ '+-------------------------------------------------------------+
- 101 '| Program..: BINDEC.BAS |
- 102 '| Author...: Steve Manes; modified by Luis A. Castro |
- 103 '| Date.....: August 1, 1983 |
- 104 '| Notes....: Converts a binary file to a dBASE II decimal |
- 105 '| POKE sequence. |
- 106 '+-------------------------------------------------------------+
- 107 '
- 200 DEFINT A-Z
- 250 '
- 300 'Get input and output filenames.
- 305 CLS
- 310 LOCATE 2, 1 :PRINT "Binary to hexadecimal file conversion"
- 320 LOCATE 5, 1 :INPUT "Source filename (with EXT.) - ",FILEIN$
- 330 LOCATE 6, 1 :INPUT "Output filename (.DTX) - ",FILEOUT$
- 340 IF FILEIN$="" OR FILEOUT$="" THEN SYSTEM
- 345 PRINT
- 350 '
- 355 'Open input file.
- 360 OPEN "R", #1, FILEIN$, 1
- 370 FIELD #1, 1 AS ONEBYTE$
- 380 COUNT = 0
- 400 IF INSTR( "EXE,exe", RIGHT$(FILEIN$,3) ) <> 0 THEN ELSE 500
- 410 'Get file offset from EXE file header and initialize pointer.
- 415 'Get offset to program data.
- 420 'COUNT will equal the input file byte offset.
- 425 GET #1, 9
- 430 LOW.ORDER.BYTE = ASC( ONEBYTE$ )
- 435 GET #1, 10
- 440 HIGH.ORDER.BYTE = ASC( ONEBYTE$ )
- 445 COUNT = INT( (LOW.ORDER.BYTE * 16) + (HIGH.ORDER.BYTE * 4096) ) + 1
- 450 GOTO 700
- 500 'ELSE
- 510 IF INSTR( "COM,com", RIGHT$(FILEIN$,3) ) <> 0 THEN ELSE 600
- 520 'COM files have no program header.
- 530 'Initialize pointer to first byte.
- 540 COUNT = 1
- 550 GOTO 700
- 600 'ELSE
- 620 PRINT
- 630 PRINT "Can only convert COM or EXE type files."
- 640 CLOSE 1
- 650 END
- 700 'ENDIF
- 710 '
- 720 'Force .DTX extension to filename and open output file.
- 730 POSITION = INSTR( FILEOUT$, "." )
- 740 IF POSITION > 0 THEN FILEOUT$ = LEFT$( FILEOUT$, POSITION - 1 )
- 750 FILEOUT$ = FILEOUT$ + ".DTX"
- 810 OPEN "R", #2, FILEOUT$, 80
- 820 FIELD #2, 80 AS RESULT$
- 830 '
- 900 FALSE = 0
- 905 TRUE = NOT FALSE
- 910 CHARCOUNT = 0 'Number of chars in current string.
- 930 DECSTRING$ = "" 'ASCII decimal string.
- 940 RECNUM = 1 'Output file record number.
- 950 '
- 1030 TOTAL.BYTES = LOF(1)
- 2000 WHILE COUNT <= TOTAL.BYTES
- 2010 GET #1, COUNT
- 2020 BYTE = ASC( ONEBYTE$ ) 'ASCII value of input byte.
- 2120 BYTE$ = HEX$( BYTE ) 'Format leading zero.
- 2130 IF BYTE < 16 THEN BYTE$ = "0" + BYTE$
- 2210 BYTE$ = BYTE$ + " "
- 2320 DEC$ = MID$( STR$( BYTE ), 2 ) 'Strip leading blank in STR$
- 2330 DEC$ = STRING$(3-LEN(DEC$),"0")+DEC$+","+" " 'Format decimal byte
- 2340 DECSTRING$ = DECSTRING$ + DEC$ 'Add it to DECSTRING$
- 2350 CHARCOUNT = CHARCOUNT + 1 'Increment character counter
- 2360 IF (CHARCOUNT MOD 16) = 0 THEN GOSUB 7000 'DUMP_STRING
- 2370 COUNT = COUNT + 1 'Increment input byte counter
- 2400 WEND
- 2410 '
- 3000 'Remove last comma in DECSTRING$.
- 3020 POSITION = ( CHARCOUNT MOD 16 )
- 3050 IF POSITION<>0 THEN DECSTRING$ = MID$(DECSTRING$,1,LEN(DECSTRING$)-2)
- 3100 DECSTRING$ = DECSTRING$ + STRING$( 80 - LEN(DECSTRING$), 26 ) 'pad.
- 3200 GOSUB 7000 'DUMP_STRING
- 3210 LSET RESULT$ = STRING$( 80, 26 ) 'A little extra padding.
- 3220 PUT #2, RECNUM
- 3230 CLOSE 1, 2
- 3250 LOCATE 22, 1 :PRINT "... done "
- 4000 SYSTEM
- 4010 '
- 4020 '
- 7000 'Subroutine: FORMAT_STRINGS_AND_PRINT_ON_SCREEN
- 7050 '+--------------------------------------------+
- 7110 DECSTRING$ = MID$( DECSTRING$, 1, LEN(DECSTRING$) - 2 )
- 7120 ROW = (RECNUM MOD 16) + 5
- 7130 LOCATE ROW + 1, 1 :PRINT STRING$( 80, " " );
- 7150 LOCATE ROW, 1 :PRINT DECSTRING$;
- 7220 DECSTRING$ = DECSTRING$ + CHR$(13) + CHR$(10) 'Add CR/LF.
- 7230 LSET RESULT$ = DECSTRING$
- 7240 PUT #2, RECNUM 'Write decimal string to .DTX file
- 7320 DECSTRING$ = ""
- 7330 RECNUM = RECNUM + 1 'Increment output record number.
- 7340 RETURN
- 7400 '
- 9000 'EOF Bindec.bas